package dewu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 洗盘子
 * 餐馆有 n 个盘子要清洗，从上到下的编号为 1~n，小A智慧每次拿最上面连续的若干个编号的盘子 l~r，然后按照 r~l 的顺序来清洗它们。
 * 现在，给出一个人洗这 n 个盘子的顺序，请你判断一下是否可能是小A洗盘子的顺序。
 * 第一行输入一个整数T表示数据的组数。
 * 对于每组数据第一行一个整数n。
 * 第二行n个整数a1~an，数字间使用空格分割，表示某个人洗盘子的顺序。
 * 如果可能是小A洗的输出yes，否则输出no
 *
 * @author Liu Yicong
 * @date 2025/9/26
 */

/*
输入示例：
4
5
1 2 5 4 3
5
1 2 5 3 4
8
1 2 5 4 3 6 7 8
8
1 2 7 5 4 3 6 8
输出:
yes
no
yes
no
 */
public class Algs2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt(); // 组数
		List<int[]> inp = new ArrayList<>();
		while (T-- > 0) {
			int n = sc.nextInt();
			int[] arr = new int[n];
			for (int i = 0; i < n; i++) {
				arr[i] = sc.nextInt();
			}
			inp.add(arr);
		}
		sc.close();
		inp.forEach(s -> System.out.println(checkSequence(s, s.length) ? "yes" : "no"));
	}

	private static boolean checkSequence(int[] arr, int n) {
		int i = 0;
		boolean[] used = new boolean[n + 1]; // 标记是否覆盖
		while (i < n) {
			// 找一段递减区间
			int start = i;
			while (i + 1 < n && arr[i + 1] < arr[i]) {
				i++;
			}
			int end = i;

			// 区间 [start..end] 形成一个块
			int max = arr[start], min = arr[end];
			// 检查是否连续区间
			if (max - min != end - start) return false;

			// 检查是否覆盖连续数字
			for (int val = min; val <= max; val++) {
				if (used[val]) return false; // 检查是否出现了重复的数字
				used[val] = true;
			}

			i++; // 继续下一个块
		}

		// 最后检查是否所有数字都覆盖
		for (int val = 1; val <= n; val++) {
			if (!used[val]) return false;
		}
		return true;
	}
}
